package com.tonann.app.mapper;

import com.tonann.app.domain.Place;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 空间位置管理 数据层
 *
 * @author ruoyi
 */
public interface PlaceMapper
{
    /**
     * 查询空间位置管理数据
     *
     * @param place 空间位置信息
     * @return 空间位置信息集合
     */
    public List<Place> selectPlaceList(Place place);

    /**
     * 根据角色ID查询空间位置树信息
     *
     * @param roleId 角色ID
     * @param placeCheckStrictly 空间位置树选择项是否关联显示
     * @return 选中空间位置列表
     */
    public List<Long> selectPlaceListByRoleId(@Param("roleId") Long roleId, @Param("placeCheckStrictly") boolean placeCheckStrictly);

    /**
     * 根据空间位置ID查询信息
     *
     * @param placeId 空间位置ID
     * @return 空间位置信息
     */
    public Place selectPlaceById(Long placeId);

    /**
     * 根据ID查询所有子空间位置
     *
     * @param placeId 空间位置ID
     * @return 空间位置列表
     */
    public List<Place> selectChildrenPlaceById(Long placeId);

    /**
     * 根据ID查询所有子空间位置（正常状态）
     *
     * @param placeId 空间位置ID
     * @return 子空间位置数
     */
    public int selectNormalChildrenPlaceById(Long placeId);

    /**
     * 是否存在子节点
     *
     * @param placeId 空间位置ID
     * @return 结果
     */
    public int hasChildByPlaceId(Long placeId);

    /**
     * 查询空间位置是否存在用户
     *
     * @param placeId 空间位置ID
     * @return 结果
     */
    public int checkPlaceExistUser(Long placeId);

    /**
     * 校验空间位置名称是否唯一
     *
     * @param placeName 空间位置名称
     * @param parentId 父空间位置ID
     * @return 结果
     */
    public Place checkPlaceNameUnique(@Param("placeName") String placeName, @Param("parentId") Long parentId);

    /**
     * 新增空间位置信息
     *
     * @param place 空间位置信息
     * @return 结果
     */
    public int insertPlace(Place place);

    /**
     * 修改空间位置信息
     *
     * @param place 空间位置信息
     * @return 结果
     */
    public int updatePlace(Place place);

    /**
     * 修改所在空间位置正常状态
     *
     * @param placeIds 空间位置ID组
     */
    public void updatePlaceStatusNormal(Long[] placeIds);

    /**
     * 修改子元素关系
     *
     * @param places 子元素
     * @return 结果
     */
    public int updatePlaceChildren(@Param("places") List<Place> places);

    /**
     * 删除空间位置管理信息
     *
     * @param placeId 空间位置ID
     * @return 结果
     */
    public int deletePlaceById(Long placeId);

    List<Place> selectPlaceByPlaceName(String placeName);
}
